package com.aheizi.oa.service.impl;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.aheizi.oa.base.DaoSupportImpl;
import com.aheizi.oa.domain.Forum;
import com.aheizi.oa.domain.Topic;
import com.aheizi.oa.service.TopicService;

@Service
@Transactional
@SuppressWarnings("unchecked")
public class TopicServiceImpl extends DaoSupportImpl<Topic> implements TopicService {

	public List<Topic> findByForum(Forum forum) {
		//排序：所有置顶贴在最上面，并按最后更新时间排序，让新状态在最上面
		// TODO 怎么排序
		return getSession().createQuery(//
				"from Topic t where t.forum=? order by (case t.type when 2 then 2 else 0 end) desc, t.lastUpdateTime desc")
				.setParameter(0, forum)
				.list();
	}

	public void save(Topic topic) {
		// 1，设置属性并保存
		topic.setType(Topic.TYPE_NORMAL); // 默认为普通帖
		topic.setReplyCount(0);
		topic.setLastReply(null);
		topic.setLastUpdateTime(topic.getPostTime());
		getSession().save(topic); // 保存

		// 2，维护相关的特殊属性
		Forum forum = topic.getForum();
		forum.setTopicCount(forum.getTopicCount() + 1); // 主题数量
		forum.setArticleCount(forum.getArticleCount() + 1);// 文章数量（主题数+回复数）
		forum.setLastTopic(topic); // 最后发表的主题
		getSession().update(forum);
	}
}
